﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Collections;

namespace eepg_contratos.Models
{
    #region ContratosModels
    public class ContratoModel
    {
        public String contrato { get; set; }
        public String id { get; set; }
        public String titulo { get; set; }
        public String descripcion { get; set; }
        public String proceso { get; set; }
        public String tipo { get; set; }
        public String monto { get; set; }
        public String es_contratista { get; set; }
        public String id_contratista { get; set; }
        public String contratista { get; set; }
        public String contratista_representante { get; set; }
        public String id_gerencia { get; set; }
        public String gerencia { get; set; }
        public String cod_administrador { get; set; }
        public String administrador { get; set; }
        public String cod_delegado { get; set; }
        public String delegado { get; set; }
        public String fecha_suscripcion { get; set; }
        public String fecha_inicio { get; set; }
        public String fecha_fin { get; set; }
        public String fecha_culminacion { get; set; }
        public String resolucion { get; set; }
        public String fecha_resolucion { get; set; }
        public String observacion { get; set; }
        public String id_estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String archivo_proyecto { get; set; }
        //Para filtrar
        public String fecha_susc_ini { get; set; }
        public String fecha_susc_fin { get; set; }
        public String fecha_ing_ini { get; set; }
        public String fecha_ing_fin { get; set; }
    }

    public class FiscalizadorModel {
        public String contrato { get; set; }
        public String id_tipo { get; set; }
        public String tipo { get; set; }
        public String codigo { get; set; }
        public String nombre { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String guid { get; set; }
    }

    public class ArchivoModel
    {
        public String contrato { get; set; }
        public String nombre_archivo { get; set; }
        public byte[] archivo { get; set; }
        public String extension { get; set; }
        public String tamano { get; set; }
        public String tipo { get; set; }
        public String id_estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String guid { get; set; }
        public String descripcion { get; set; }
    }

    public class PagoModel
    {
        public String contrato { get; set; }
        public String fecha_entrega { get; set; }
        public String valor { get; set; }
        public String id_forma_pago { get; set; }
        public String comentario { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String guid { get; set; }
    }

    public class ProrrogaModel
    {
        public String contrato { get; set; }
        public String descripcion { get; set; }
        public String fecha_inicio { get; set; }
        public String fecha_fin { get; set; }
        public String valor_multa { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String guid { get; set; }
    }

    public class ActividadModel
    {
        public String contrato { get; set; }
        public String descripcion { get; set; }
        public String fecha_inicio { get; set; }
        public String fecha_fin { get; set; }
        public String id_estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String guid { get; set; }
    }

    public class GarantiaModel
    {
        public String contrato { get; set; }
        public String descripcion { get; set; }
        public String tipo { get; set; }
        public String aseguradora { get; set; }
        public String monto { get; set; }
        public String fecha_inicio { get; set; }
        public String fecha_fin { get; set; }
        public String id_estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
        public String guid { get; set; }
    }

    #endregion

    #region ContratosServices
    public class ContratoServices
    {
        private DataTable contratos;
        private DataTable fiscalizadores;
        private DataTable pagos;
        private DataTable prorrogas;
        private DataTable actividades;
        private DataTable garantias;
        private DataTable listado;
        private DataTable archivos;
        
        public ContratoServices()
        {
            contratos = new DataTable();
            fiscalizadores = new DataTable();
            pagos = new DataTable();
            prorrogas = new DataTable();
            actividades = new DataTable();
            garantias = new DataTable();
            listado = new DataTable();
            archivos = new DataTable();
            /*
            DataColumn IDColumn = contratos.Columns.Add("Id", Type.GetType("System.Int32"));
            IDColumn.AutoIncrement = true;
            IDColumn.AutoIncrementSeed = 1;
            IDColumn.AutoIncrementStep = 1;
            */
            //CONTRATOS
            contratos.Columns.Add("Contrato", Type.GetType("System.String"));
            contratos.Columns.Add("Proyecto", Type.GetType("System.String"));
            contratos.Columns.Add("Titulo", Type.GetType("System.String"));
            contratos.Columns.Add("Proceso", Type.GetType("System.String"));
            contratos.Columns.Add("Monto", Type.GetType("System.Double"));
            contratos.Columns.Add("Fecha Suscripcion", Type.GetType("System.DateTime"));
            contratos.Columns.Add("Fecha Culminacion", Type.GetType("System.DateTime"));
            //FISCALIZADORES
            fiscalizadores.Columns.Add("Tipo", Type.GetType("System.String"));
            fiscalizadores.Columns.Add("Codigo", Type.GetType("System.String"));
            fiscalizadores.Columns.Add("Nombre", Type.GetType("System.String"));
            fiscalizadores.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            fiscalizadores.Columns.Add("GUID", Type.GetType("System.String"));
            //ACTIVIDADES
            actividades.Columns.Add("Descripcion", Type.GetType("System.String"));
            actividades.Columns.Add("Fecha Inicio", Type.GetType("System.DateTime"));
            actividades.Columns.Add("Fecha Fin", Type.GetType("System.DateTime"));
            actividades.Columns.Add("Estado", Type.GetType("System.String"));
            actividades.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            actividades.Columns.Add("GUID", Type.GetType("System.String"));
            //PAGOS
            pagos.Columns.Add("Fecha Pago", Type.GetType("System.DateTime"));
            pagos.Columns.Add("Valor", Type.GetType("System.Double"));
            pagos.Columns.Add("Forma Pago", Type.GetType("System.String"));
            pagos.Columns.Add("Comentario", Type.GetType("System.String"));
            pagos.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            pagos.Columns.Add("GUID", Type.GetType("System.String"));
            //PRORROGAS
            prorrogas.Columns.Add("Descripcion", Type.GetType("System.String"));
            prorrogas.Columns.Add("Fecha Inicio", Type.GetType("System.DateTime"));
            prorrogas.Columns.Add("Fecha Fin", Type.GetType("System.DateTime"));
            prorrogas.Columns.Add("Multa", Type.GetType("System.Double"));
            prorrogas.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            prorrogas.Columns.Add("GUID", Type.GetType("System.String"));
            //GARANTIAS
            garantias.Columns.Add("Descripcion", Type.GetType("System.String"));
            garantias.Columns.Add("Tipo", Type.GetType("System.String"));
            garantias.Columns.Add("Aseguradora", Type.GetType("System.String"));
            garantias.Columns.Add("Monto", Type.GetType("System.Double"));
            garantias.Columns.Add("Fecha Inicio", Type.GetType("System.DateTime"));
            garantias.Columns.Add("Fecha Fin", Type.GetType("System.DateTime"));
            garantias.Columns.Add("Estado", Type.GetType("System.String"));
            garantias.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            garantias.Columns.Add("GUID", Type.GetType("System.String"));
            //ARCHIVOS
            archivos.Columns.Add("Archivo", Type.GetType("System.String"));
            archivos.Columns.Add("Nombre", Type.GetType("System.String"));
            archivos.Columns.Add("Tipo", Type.GetType("System.String"));
            archivos.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            archivos.Columns.Add("GUID", Type.GetType("System.String"));

            //contratos.Columns.Add("FechaContrato", Type.GetType("System.DateTime"));
            /*
            DataColumn[] keys = new DataColumn[1];
            keys[0] = IDColumn;
            contratos.PrimaryKey = keys;
             */
        }

        public ArrayList Consultar(String contrato)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vContrato = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_CONSULTA_CONTRATO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ContratoModel c;
            
            while (oReader.Read())
            {
                c = new ContratoModel();
                c.contrato = oReader["contrato"].ToString();
                c.id = oReader["id"].ToString();
                c.titulo = oReader["titulo"].ToString();
                c.descripcion = oReader["descripcion"].ToString();
                c.tipo = oReader["tipo"].ToString();
                c.id_estado = oReader["id_estado"].ToString();
                c.proceso = oReader["proceso"].ToString();
                c.monto = oReader["monto"].ToString();
                c.es_contratista = oReader["es_contratista"].ToString();
                c.id_contratista = oReader["id_contratista"].ToString();
                c.contratista = oReader["contratista"].ToString();
                c.id_gerencia = oReader["id_gerencia"].ToString();
                c.gerencia = oReader["gerencia"].ToString();
                c.cod_administrador = oReader["cod_administrador"].ToString();
                c.administrador = oReader["administrador"].ToString();
                c.cod_delegado = oReader["cod_delegado"].ToString();
                c.delegado = oReader["delegado"].ToString();
                c.fecha_suscripcion = oReader["fecha_suscripcion"].ToString();
                c.fecha_inicio = oReader["fecha_inicio"].ToString();
                c.fecha_fin = oReader["fecha_fin"].ToString();
                c.fecha_culminacion = oReader["fecha_culminacion"].ToString();
                c.resolucion = oReader["resolucion"].ToString();
                c.fecha_resolucion = oReader["fecha_resolucion"].ToString();
                c.observacion = oReader["observacion"].ToString();
                c.contratista_representante = oReader["contratista_representante"].ToString();
                vContrato.Add(c);
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return vContrato;
        }

        public ArchivoModel ConsultarArchivo(String contrato, String guid)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_CONSULTA_ARCHIVO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_tipo", guid);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ArchivoModel a;
            a = new ArchivoModel();
            while (oReader.Read())
            {
                a.nombre_archivo = oReader["nombre_archivo"].ToString();
                a.archivo = (byte[])oReader["archivo"];
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return a;
        }

        public void EliminarFiscalizador(FiscalizadorModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_ELIMINA_FISCALIZADOR";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarArchivo(ArchivoModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_ELIMINA_ARCHIVO";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarActividad(ActividadModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_ELIMINA_ACTIVIDAD";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarPago(PagoModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_ELIMINA_PAGO";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarProrroga(ProrrogaModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_ELIMINA_PRORROGA";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarGarantia(GarantiaModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_ELIMINA_GARANTIA";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public DataTable Listar(String filtro)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vContrato = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_CONTRATOS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_filtro", filtro);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_encontrado", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ContratoModel c;
            contratos.Rows.Clear();
            while (oReader.Read())
            {
                c = new ContratoModel();
                c.contrato = oReader["contrato"].ToString();
                c.titulo = oReader["titulo"].ToString();
                c.proceso = oReader["proceso"].ToString();
                c.monto =oReader["monto"].ToString();
                c.fecha_suscripcion = oReader["fecha_suscripcion"].ToString();
                c.fecha_culminacion = oReader["fecha_culminacion"].ToString();
                c.archivo_proyecto = oReader["archivo_proyecto"].ToString();
                vContrato.Add(c);               
            }
            foreach (ContratoModel item in vContrato)
            {
                DataRow row = contratos.NewRow();
                contratos.Rows.Add(row);
                row["Contrato"] = "" + item.contrato.ToString();
                row["Titulo"] = "" + item.titulo.ToString();
                row["Proceso"] = "" + item.proceso.ToString();
                if (item.monto.Trim() == "") { item.monto = "0.00"; }
                row["Monto"] = item.monto;
                if (item.fecha_suscripcion.Trim() == "") {}
                else
                {
                    row["Fecha Suscripcion"] = item.fecha_suscripcion;
                }
                if (item.fecha_culminacion.Trim() == "") { }
                else
                {
                    row["Fecha Culminacion"] = item.fecha_culminacion;
                }
                if (item.archivo_proyecto.Trim() == "") { }
                else
                {
                    row["Proyecto"] = "<button title='Descargar archivo de proyecto' id='proyecto_" + item.archivo_proyecto + "' class='btnArchivo'><div></div><span style='display: none;'>" + item.contrato.ToString() + "</span></button>";
                }

            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return contratos;
        }

        public DataTable ListarFiscalizadores(String contrato)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vFiscal = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_FISCALIZADORES";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            FiscalizadorModel c;
            fiscalizadores.Rows.Clear();
            while (oReader.Read())
            {
                c = new FiscalizadorModel();
                c.codigo = oReader["codigo"].ToString();
                c.nombre = oReader["nombre"].ToString();
                c.tipo = oReader["tipo"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vFiscal.Add(c);
            }
            foreach (FiscalizadorModel item in vFiscal)
            {
                DataRow row = fiscalizadores.NewRow();
                fiscalizadores.Rows.Add(row);
                row["Codigo"] = "" + item.codigo.ToString();
                row["Nombre"] = "" + item.nombre.ToString();
                row["Tipo"] = "" + item.tipo.ToString();
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return fiscalizadores;
        }

        public DataTable ListarActividades(String contrato)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vActividad = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_ACTIVIDADES";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ActividadModel c;
            actividades.Rows.Clear();
            while (oReader.Read())
            {
                c = new ActividadModel();
                c.descripcion = oReader["descripcion"].ToString();
                c.fecha_inicio = oReader["fecha_inicio"].ToString();
                c.fecha_fin = oReader["fecha_fin"].ToString();
                c.id_estado = oReader["id_estado"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vActividad.Add(c);
            }
            foreach (ActividadModel item in vActividad)
            {
                DataRow row = actividades.NewRow();
                actividades.Rows.Add(row);
                row["Descripcion"] = "" + item.descripcion.ToString();
                row["Fecha Inicio"] = "" + item.fecha_inicio.ToString();
                row["Fecha Fin"] = "" + item.fecha_fin.ToString();
                row["Estado"] = item.id_estado;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return actividades;
        }

        public DataTable ListarArchivos(String contrato, String tipo)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vArchivo = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_ARCHIVOS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_tipo", tipo);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ArchivoModel c;
            archivos.Rows.Clear();
            while (oReader.Read())
            {
                c = new ArchivoModel();
                c.nombre_archivo = oReader["nombre_archivo"].ToString();
                c.tipo = oReader["tipo"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vArchivo.Add(c);
            }
            foreach (ArchivoModel item in vArchivo)
            {
                DataRow row = archivos.NewRow();
                archivos.Rows.Add(row);
                row["Nombre"] = "" + item.nombre_archivo.ToString();
                row["Tipo"] = "" + item.tipo.ToString();
                row["Fecha Ingreso"] = item.fecha_ing;
                //var button_descargar = "<a title='Descargar archivo' href='" + basePath + "/Contratos/ConsultarArchivo?contrato=" + contrato + "&tipo=CONTRATO' id='btnVerArchivo' name='btnVerArchivo'><div style='width: 250px; overflow: auto; float: left;'><img src='" + basePath + "/Images/descargar.png' />&nbsp" + nombre_archivo + "</div></a>";
                //var button_eliminar = "<button title='Eliminar archivo' id='btnDelArchivo' name='btnDelArchivo' style='float: right;'><img src='" + basePath + "/Images/delete.png' /></button>";
                row["GUID"] = item.guid.ToString();
                row["Archivo"] = "<button title='Archivo' id='archivo_" + item.guid + "' class='btnArchivo'></button>";
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return archivos;
        }

        public DataTable ListarPagos(String contrato)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vPago = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_PAGOS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            PagoModel c;
            pagos.Rows.Clear();
            while (oReader.Read())
            {
                c = new PagoModel();
                c.comentario = oReader["comentario"].ToString();
                c.fecha_entrega = oReader["fecha_entrega"].ToString();
                c.valor = oReader["valor"].ToString();
                c.id_forma_pago = oReader["id_forma_pago"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vPago.Add(c);
            }
            foreach (PagoModel item in vPago)
            {
                DataRow row = pagos.NewRow();
                pagos.Rows.Add(row);
                row["Comentario"] = "" + item.comentario.ToString();
                row["Fecha Pago"] = "" + item.fecha_entrega.ToString();
                row["Valor"] = "" + item.valor.ToString();
                row["Forma Pago"] = item.id_forma_pago;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return pagos;
        }

        public DataTable ListarPagosCGWEB(String id)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vPago = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_PAGOS_CGWEB";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_id", id);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            PagoModel c;
            pagos.Rows.Clear();
            while (oReader.Read())
            {
                c = new PagoModel();
                c.comentario = oReader["comentario"].ToString();
                c.fecha_entrega = oReader["fecha_entrega"].ToString();
                c.valor = oReader["valor"].ToString();
                c.id_forma_pago = oReader["id_forma_pago"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vPago.Add(c);
            }
            foreach (PagoModel item in vPago)
            {
                DataRow row = pagos.NewRow();
                pagos.Rows.Add(row);
                row["Comentario"] = "" + item.comentario.ToString();
                row["Fecha Pago"] = "" + item.fecha_entrega.ToString();
                row["Valor"] = "" + item.valor.ToString();
                row["Forma Pago"] = item.id_forma_pago;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return pagos;
        }

        public DataTable ListarProrrogas(String contrato)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vProrroga = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_PRORROGAS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ProrrogaModel c;
            prorrogas.Rows.Clear();
            while (oReader.Read())
            {
                c = new ProrrogaModel();
                c.descripcion = oReader["descripcion"].ToString();
                c.fecha_inicio = oReader["fecha_inicio"].ToString();
                c.fecha_fin = oReader["fecha_fin"].ToString();
                c.valor_multa = oReader["valor_multa"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vProrroga.Add(c);
            }
            foreach (ProrrogaModel item in vProrroga)
            {
                DataRow row = prorrogas.NewRow();
                prorrogas.Rows.Add(row);
                row["Descripcion"] = "" + item.descripcion.ToString();
                row["Fecha Inicio"] = "" + item.fecha_inicio.ToString();
                row["Fecha Fin"] = "" + item.fecha_fin.ToString();
                row["Multa"] = item.valor_multa;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return prorrogas;
        }

        public DataTable ListarGarantias(String contrato)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vGarantia = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_GARANTIAS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contrato", contrato);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            GarantiaModel c;
            garantias.Rows.Clear();
            while (oReader.Read())
            {
                c = new GarantiaModel();
                c.descripcion = oReader["descripcion"].ToString();
                c.tipo = oReader["tipo"].ToString();
                c.aseguradora = oReader["aseguradora"].ToString();
                c.monto = oReader["monto"].ToString();
                c.fecha_inicio = oReader["fecha_inicio"].ToString();
                c.fecha_fin = oReader["fecha_fin"].ToString();
                c.id_estado = oReader["id_estado"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vGarantia.Add(c);
            }
            foreach (GarantiaModel item in vGarantia)
            {
                DataRow row = garantias.NewRow();
                garantias.Rows.Add(row);
                row["Descripcion"] = "" + item.descripcion.ToString();
                row["Tipo"] = "" + item.tipo.ToString();
                row["Aseguradora"] = "" + item.aseguradora.ToString();
                row["Monto"] = "" + item.monto.ToString();
                row["Fecha Inicio"] = "" + item.fecha_inicio.ToString();
                row["Fecha Fin"] = "" + item.fecha_fin.ToString();
                row["Estado"] = item.id_estado;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return garantias;
        }

        public DataTable ListarGarantiasCGWEB(String id)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vGarantia = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CONTRA.PROC_LISTAR_GARANTIAS_CGWEB";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_id", id);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            GarantiaModel c;
            garantias.Rows.Clear();
            while (oReader.Read())
            {
                c = new GarantiaModel();
                c.descripcion = oReader["descripcion"].ToString();
                c.tipo = oReader["tipo"].ToString();
                c.aseguradora = oReader["aseguradora"].ToString();
                c.monto = oReader["monto"].ToString();
                c.fecha_inicio = oReader["fecha_inicio"].ToString();
                c.fecha_fin = oReader["fecha_fin"].ToString();
                c.id_estado = oReader["id_estado"].ToString();
                c.fecha_ing = oReader["fecha_ing"].ToString();
                c.guid = oReader["guid"].ToString();
                vGarantia.Add(c);
            }
            foreach (GarantiaModel item in vGarantia)
            {
                DataRow row = garantias.NewRow();
                garantias.Rows.Add(row);
                row["Descripcion"] = "" + item.descripcion.ToString();
                row["Tipo"] = "" + item.tipo.ToString();
                row["Aseguradora"] = "" + item.aseguradora.ToString();
                row["Monto"] = "" + item.monto.ToString();
                row["Fecha Inicio"] = "" + item.fecha_inicio.ToString();
                row["Fecha Fin"] = "" + item.fecha_fin.ToString();
                row["Estado"] = item.id_estado;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["GUID"] = item.guid.ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return garantias;
        }

        public DataTable ListarHistorial (String sql)
        {
            ConexionServices cs = new ConexionServices();
            
            DataTable dt =  new DataTable();
            dt =cs.Consultar(sql);
            return dt;
        }

        public void Agregar(ContratoModel c)
        {
            ConexionModel cm = new ConexionModel();
            
            String sql = "PKG_CONTRA.PROC_INGRESA_CONTRATO";
            
            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();
            
            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;
            
            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", c.contrato);
            param.Add("p_id", c.id);
            param.Add("p_titulo", c.titulo);
            param.Add("p_descripcion", c.descripcion);
            param.Add("p_proceso", c.proceso);
            param.Add("p_tipo", c.tipo);
            param.Add("p_monto", c.monto);
            param.Add("p_es_contratista", c.es_contratista);
            param.Add("p_contratista", c.contratista);
            param.Add("p_contratista_representante", c.contratista_representante);
            param.Add("p_id_gerencia", c.id_gerencia);
            param.Add("p_administrador", c.administrador);
            param.Add("p_delegado", c.delegado);
            param.Add("p_fecha_suscripcion", c.fecha_suscripcion);
            param.Add("p_fecha_inicio", c.fecha_inicio);
            param.Add("p_fecha_fin", c.fecha_fin);
            param.Add("p_fecha_culminacion", c.fecha_culminacion);
            param.Add("p_resolucion", c.resolucion);
            param.Add("p_fecha_resolucion", c.fecha_resolucion);
            param.Add("p_observacion", c.observacion);
            param.Add("p_id_estado", c.id_estado);
            param.Add("p_fecha_ing", c.fecha_ing);
            param.Add("p_usuario_ing", c.usuario_ing);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }

        }

        public void GuardarFiscalizador(FiscalizadorModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_INGRESA_FISCALIZADOR";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_tipo", a.id_tipo);
            param.Add("p_codigo", a.codigo);
            param.Add("p_nombre", a.nombre);
            param.Add("p_fecha_ing", a.fecha_ing);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void GuardarArchivo(ArchivoModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_INGRESA_ARCHIVO";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_nombre_archivo", a.nombre_archivo);
            param.Add(new OracleParameter("p_archivo", OracleDbType.Blob)).Value = a.archivo;
            param.Add("p_extension", a.extension);
            param.Add("p_tamano", a.tamano);
            param.Add("p_tipo", a.tipo);
            param.Add("p_id_estado", a.id_estado);
            param.Add("p_descripcion", a.descripcion);
            param.Add("p_fecha_ing", a.fecha_ing);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 1500).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void GuardarActividad(ActividadModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_INGRESA_ACTIVIDAD";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_descripcion", a.descripcion);
            param.Add("p_fecha_inicio", a.fecha_inicio);
            param.Add("p_fecha_fin", a.fecha_fin);
            param.Add("p_id_estado", a.id_estado);
            param.Add("p_fecha_ing", a.fecha_ing);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void GuardarPago(PagoModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_INGRESA_PAGO";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_fecha_entrega", a.fecha_entrega);
            param.Add("p_valor", a.valor);
            param.Add("p_id_forma_pago", a.id_forma_pago);
            param.Add("p_comentario", a.comentario);
            param.Add("p_fecha_ing", a.fecha_ing);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void GuardarProrroga(ProrrogaModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_INGRESA_PRORROGA";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_descripcion", a.descripcion);
            param.Add("p_fecha_inicio", a.fecha_inicio);
            param.Add("p_fecha_fin", a.fecha_fin);
            param.Add("p_valor_multa", a.valor_multa);
            param.Add("p_fecha_ing", a.fecha_ing);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void GuardarGarantia(GarantiaModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_CONTRA.PROC_INGRESA_GARANTIA";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_contrato", a.contrato);
            param.Add("p_descripcion", a.descripcion);
            param.Add("p_tipo", a.tipo);
            param.Add("p_aseguradora", a.aseguradora);
            param.Add("p_monto", a.monto);
            param.Add("p_fecha_inicio", a.fecha_inicio);
            param.Add("p_fecha_fin", a.fecha_fin);
            param.Add("p_id_estado", a.id_estado);
            param.Add("p_fecha_ing", a.fecha_ing);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void Eliminar(String ID)
        {
        }
        
        public ArrayList ListarCatalogos(String catalogo_nombre, String filtro)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vListado = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_GENERAL.PROC_LISTAR_CATALOGO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_catalogo_nombre", catalogo_nombre);
            Comm.Parameters.Add("p_texto", filtro);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ListadoModel l;

            while (oReader.Read())
            {
                l = new ListadoModel();
                l.id = oReader.GetValue(0).ToString();
                l.descripcion = oReader.GetValue(1).ToString();
                vListado.Add(l);
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return vListado;
        }

        public ArrayList ListarCatalogosCGWEB(String catalogo_nombre, String filtro)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vListado = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_GENERAL.PROC_LISTAR_CATALOGO_CGWEB";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_catalogo_nombre", catalogo_nombre);
            Comm.Parameters.Add("p_texto", filtro);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ListadoModel l;

            while (oReader.Read())
            {
                l = new ListadoModel();
                l.id = oReader.GetValue(0).ToString();
                l.descripcion = oReader.GetValue(1).ToString();
                vListado.Add(l);
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return vListado;
        }

        public ArrayList ListarGerencias(String filtro)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vListado = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_GENERAL.PROC_LISTAR_GERENCIAS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_texto", filtro);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ListadoModel l;

            while (oReader.Read())
            {
                l = new ListadoModel();
                l.id = oReader.GetValue(0).ToString();
                l.descripcion = oReader.GetValue(1).ToString();
                vListado.Add(l);
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return vListado;
        }

    }
  
    #endregion
    
    #region ContratosValidation

    #endregion
}